#/usr/bin/env python3
# -*- coding:utf-8 -*-

__author__ = 'Kongfuzhou'

'''
JSON PAI definition
'''

import json,logging,inspect,functools,math

class APIError(Exception):
	'''
	the base APIError which contains error(required),data(optinal) and message(optinal). 

	'''
	def __init__(self,error,data='',message=''):
		super(APIError,self).__init__(message)
		self.error = error
		self.data = data
		self.message = message


class APIValueError(APIError):
	def __init__(self,field,message=''):
		super(APIValueError,self).__init__("value:invalid",field,message)

class APIResourceNotFoundError(APIError):
	"""docstring for APIResourceNotFoundError"""
	def __init__(self, field,message=''):
		super(APIResourceNotFoundError, self).__init__('value:not found',field,message)
		

class APIPermissionError(APIError):
	"""docstring for APIPermissionError"""
	def __init__(self, message=''):
		super(APIPermissionError, self).__init__('permission:forbidden','permission',message)
	
		
class Page(object):
	"""docstring for Page"""
	def __init__(self, item_count,page_index=1,page_size=10):
		self.item_count = item_count
		self.page_size = page_size
		self.page_count = math.ceil(item_count/page_size)
		if (item_count==0) or page_index>self.page_count:
		 	self.offset = 0
		 	self.limit =0
		 	self.page_index = 1
		else:
			self.page_index = page_index
			self.offset = self.page_size * (page_index-1)
			self.limit = self.page_size
		self.has_next = self.page_index<self.page_count #是否有下一页
		self.has_previous = self.page_index > 1

	def __str__(self):
		return "item_count:%s,page_count:%s,page_index:%s,page_size:%s,offset:%s,limit:%s"%(self.item_count,self.page_count,
			self.page_index,self.page_size,self.offset,self.limit)
	__repr__ = __str__